package dynamicCompilng.Exa01;

import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import java.io.File;

public class CompilerTest {
    public static void main(String[] args) {


    }

    /**
     * 根据文件路径+文件名编译java文件
     * @param filePath 例如：D:\TestHello.java
     * @return 返回是否成功标志
     */
    public static boolean Compiler(String filePath){
        try{
            //获取Javac编译器对象
            JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
            //获取文件管理器：负责管理类文件的输入输出
            StandardJavaFileManager fileManager = compiler.getStandardFileManager(null,null,null);
            //获取要被编译的Java源文件对象
            File file = new File(filePath);
            //通过源文件获取到要编译的Java类源码迭代器，包括所有内部类，其中每个类都是一个JavaFileObject
            Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjects(file);
            //生成编译任务
            JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, null, null, null, compilationUnits);
            //执行编译任务
            task.call();
            return true;
        }catch (Exception e){
            e.printStackTrace();
        }
        return false;
    }

}
